import {
	BASE_URL
} from '@/config/base.js'

export const uploadImage = () => {
	return new Promise((resolve, reject) => {
		uni.chooseImage({
			count: 1, //默认9
			sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图，默认二者都有
			sourceType: ['album', 'camera'], //从相册选择
			success: (res) => {
				uni.showLoading({
					title: '上传中'
				})
				let igmFile = res.tempFilePaths;
				uni.uploadFile({
					url: BASE_URL + '/api/system' + '/user/profile/avatar',
					method: "POST",
					header: {
						'Authorization': 'Bearer ' + uni.getStorageSync('token'),
						'Content-Type': 'multipart/form-data'
					},
					filePath: igmFile[0],
					name: 'avatarfile',
					success: (res) => {
						const data = JSON.parse(res.data)
						if (data.code == 200) {
							let imgUrls = data.imgUrl; //微信和头条支持
							resolve(imgUrls)
							uni.hideLoading()
							uni.showToast({
								title: data.msg,
								icon: 'none'
							})
						} else {
							uni.hideLoading()
							uni.showToast({
								title: data.msg,
								icon: 'none'
							})
						}

					},
					fail: (err) => {
						reject(err)
						uni.hideLoading()
						uni.showToast({
							title: '上传失败',
							icon: 'none'
						})
					}
				})
			},
			fail: (err) => {
				uni.hideLoading()
				uni.showToast({
					title: '取消了头像上传',
					icon: 'none'
				})
			}
		});
	})
}

/**
 * 防抖函数
 * @param fn 需要执行的函数
 * @param time 间隔时间
 * @returns
 */
export const debounce = (func, wait, immediate) => {
	let timeout; // 定义一个计时器变量，用于延迟执行函数
	return function(...args) {
		// 返回一个包装后的函数
		const context = this; // 保存函数执行上下文对象
		const later = function() {
			// 定义延迟执行的函数
			timeout = null; // 清空计时器变量
			if (!immediate) func.apply(context, args); // 若非立即执行，则调用待防抖函数
		};
		const callNow = immediate && !timeout; // 是否立即调用函数的条件
		clearTimeout(timeout); // 清空计时器
		timeout = setTimeout(later, wait); // 创建新的计时器，延迟执行函数
		if (callNow) func.apply(context, args); // 如果满足立即调用条件，则立即执行函数
	};
};

/**
 * 节流函数
 * @param fn 需要执行的函数
 * @param time 间隔时间
 * @returns
 */
export const throttle = (func, wait) => {
	let timeout // 定义一个计时器变量，用于限制函数调用频率
	return function(...args) {
		// 返回一个包装后的函数
		const context = this; // 保存函数执行上下文对象
		if (!timeout) {
			// 如果计时器不存在
			func.apply(context, args); // 执行函数
			timeout = setTimeout(() => {
				timeout = null; // 清空计时器变量
			}, wait); // 创建计时器，在指定时间后重置计时器变量
		}
	};
};